<template>
  <!-- https://codepen.io/desandro/pen/nFrte -->
  <div id="defalut">
    <h1>Isotope - filtering &amp; sorting</h1>
    <h2>Filter</h2>
    <div id="filters" class="button-group">
      <button class="button is-checked" data-filter="*">show all</button>
      <button class="button" data-filter=".metal">metal</button>
      <button class="button" data-filter=".transition">transition</button>
      <button class="button" data-filter=".alkali, .alkaline-earth">
        alkali and alkaline-earth
      </button>
      <button class="button" data-filter=":not(.transition)">
        not transition
      </button>
      <button class="button" data-filter=".metal:not(.transition)">
        metal but not transition
      </button>
      <button class="button" data-filter="numberGreaterThan50">
        number > 50
      </button>
      <button class="button" data-filter="ium">
        name ends with &ndash;ium
      </button>
    </div>

    <h2>Sort</h2>
    <div id="sorts" class="button-group">
      <button class="button is-checked" data-sort-by="original-order">
        original order
      </button>
      <button class="button" data-sort-by="name">name</button>
      <button class="button" data-sort-by="symbol">symbol</button>
      <button class="button" data-sort-by="number">number</button>
      <button class="button" data-sort-by="weight">weight</button>
      <button class="button" data-sort-by="category">category</button>
    </div>

    <div class="grid">
      <div class="element-item transition metal" data-category="transition">
        <h3 class="name">Mercury</h3>
        <p class="symbol">Hg</p>
        <p class="number">80</p>
        <p class="weight">200.59</p>
      </div>
      <div class="element-item metalloid" data-category="metalloid">
        <h3 class="name">Tellurium</h3>
        <p class="symbol">Te</p>
        <p class="number">52</p>
        <p class="weight">127.6</p>
      </div>
      <div
        class="element-item post-transition metal"
        data-category="post-transition"
      >
        <h3 class="name">Bismuth</h3>
        <p class="symbol">Bi</p>
        <p class="number">83</p>
        <p class="weight">208.980</p>
      </div>
      <div
        class="element-item post-transition metal"
        data-category="post-transition"
      >
        <h3 class="name">Lead</h3>
        <p class="symbol">Pb</p>
        <p class="number">82</p>
        <p class="weight">207.2</p>
      </div>
      <div class="element-item transition metal" data-category="transition">
        <h3 class="name">Gold</h3>
        <p class="symbol">Au</p>
        <p class="number">79</p>
        <p class="weight">196.967</p>
      </div>
      <div class="element-item alkali metal" data-category="alkali">
        <h3 class="name">Potassium</h3>
        <p class="symbol">K</p>
        <p class="number">19</p>
        <p class="weight">39.0983</p>
      </div>
      <div class="element-item alkali metal" data-category="alkali">
        <h3 class="name">Sodium</h3>
        <p class="symbol">Na</p>
        <p class="number">11</p>
        <p class="weight">22.99</p>
      </div>
      <div class="element-item transition metal" data-category="transition">
        <h3 class="name">Cadmium</h3>
        <p class="symbol">Cd</p>
        <p class="number">48</p>
        <p class="weight">112.411</p>
      </div>
      <div
        class="element-item alkaline-earth metal"
        data-category="alkaline-earth"
      >
        <h3 class="name">Calcium</h3>
        <p class="symbol">Ca</p>
        <p class="number">20</p>
        <p class="weight">40.078</p>
      </div>
      <div class="element-item transition metal" data-category="transition">
        <h3 class="name">Rhenium</h3>
        <p class="symbol">Re</p>
        <p class="number">75</p>
        <p class="weight">186.207</p>
      </div>
      <div
        class="element-item post-transition metal"
        data-category="post-transition"
      >
        <h3 class="name">Thallium</h3>
        <p class="symbol">Tl</p>
        <p class="number">81</p>
        <p class="weight">204.383</p>
      </div>
      <div class="element-item metalloid" data-category="metalloid">
        <h3 class="name">Antimony</h3>
        <p class="symbol">Sb</p>
        <p class="number">51</p>
        <p class="weight">121.76</p>
      </div>
      <div class="element-item transition metal" data-category="transition">
        <h3 class="name">Cobalt</h3>
        <p class="symbol">Co</p>
        <p class="number">27</p>
        <p class="weight">58.933</p>
      </div>
      <div
        class="element-item lanthanoid metal inner-transition"
        data-category="lanthanoid"
      >
        <h3 class="name">Ytterbium</h3>
        <p class="symbol">Yb</p>
        <p class="number">70</p>
        <p class="weight">173.054</p>
      </div>
      <div class="element-item noble-gas nonmetal" data-category="noble-gas">
        <h3 class="name">Argon</h3>
        <p class="symbol">Ar</p>
        <p class="number">18</p>
        <p class="weight">39.948</p>
      </div>
      <div class="element-item diatomic nonmetal" data-category="diatomic">
        <h3 class="name">Nitrogen</h3>
        <p class="symbol">N</p>
        <p class="number">7</p>
        <p class="weight">14.007</p>
      </div>
      <div
        class="element-item actinoid metal inner-transition"
        data-category="actinoid"
      >
        <h3 class="name">Uranium</h3>
        <p class="symbol">U</p>
        <p class="number">92</p>
        <p class="weight">238.029</p>
      </div>
      <div
        class="element-item actinoid metal inner-transition"
        data-category="actinoid"
      >
        <h3 class="name">Plutonium</h3>
        <p class="symbol">Pu</p>
        <p class="number">94</p>
        <p class="weight">(244)</p>
      </div>
    </div>
  </div>
</template>

<script>
// import $ from "jquery";
export default {
  name: "isotopelayoutdefalut",
  mounted() {
    // external js: isotope.pkgd.js

    // init Isotope
    var $grid = $(".grid").isotope({
      itemSelector: ".element-item",
      layoutMode: "fitRows",
      getSortData: {
        name: ".name",
        symbol: ".symbol",
        number: ".number parseInt",
        category: "[data-category]",
        weight: function (itemElem) {
          var weight = $(itemElem).find(".weight").text();
          return parseFloat(weight.replace(/[\(\)]/g, ""));
        },
      },
    });

    // filter functions
    var filterFns = {
      // show if number is greater than 50
      numberGreaterThan50: function () {
        var number = $(this).find(".number").text();
        return parseInt(number, 10) > 50;
      },
      // show if name ends with -ium
      ium: function () {
        var name = $(this).find(".name").text();
        return name.match(/ium$/);
      },
    };

    // bind filter button click
    $("#filters").on("click", "button", function () {
      var filterValue = $(this).attr("data-filter");
      // use filterFn if matches value
      filterValue = filterFns[filterValue] || filterValue;
      $grid.isotope({ filter: filterValue });
    });

    // bind sort button click
    $("#sorts").on("click", "button", function () {
      var sortByValue = $(this).attr("data-sort-by");
      $grid.isotope({ sortBy: sortByValue });
    });

    // change is-checked class on buttons
    $(".button-group").each(function (i, buttonGroup) {
      var $buttonGroup = $(buttonGroup);
      $buttonGroup.on("click", "button", function () {
        $buttonGroup.find(".is-checked").removeClass("is-checked");
        $(this).addClass("is-checked");
      });
    });
  },
};
</script>

<style>
* {
  box-sizing: border-box;
}

body {
  font-family: sans-serif;
}

/* ---- button ---- */

.button {
  display: inline-block;
  padding: 0.5em 1em;
  background: #eee;
  border: none;
  border-radius: 7px;
  background-image: linear-gradient(
    to bottom,
    hsla(0, 0%, 0%, 0),
    hsla(0, 0%, 0%, 0.2)
  );
  color: #222;
  font-family: sans-serif;
  font-size: 16px;
  text-shadow: 0 1px white;
  cursor: pointer;
}

.button:hover {
  background-color: #8cf;
  text-shadow: 0 1px hsla(0, 0%, 100%, 0.5);
  color: #222;
}

.button:active,
.button.is-checked {
  background-color: #28f;
}

.button.is-checked {
  color: white;
  text-shadow: 0 -1px hsla(0, 0%, 0%, 0.8);
}

.button:active {
  box-shadow: inset 0 1px 10px hsla(0, 0%, 0%, 0.8);
}

/* ---- button-group ---- */

.button-group {
  margin-bottom: 20px;
}

.button-group:after {
  content: "";
  display: block;
  clear: both;
}

.button-group .button {
  float: left;
  border-radius: 0;
  margin-left: 0;
  margin-right: 1px;
}

.button-group .button:first-child {
  border-radius: 0.5em 0 0 0.5em;
}
.button-group .button:last-child {
  border-radius: 0 0.5em 0.5em 0;
}

/* ---- isotope ---- */

.grid {
  border: 1px solid #333;
}

/* clear fix */
.grid:after {
  content: "";
  display: block;
  clear: both;
}

/* ---- .element-item ---- */

.element-item {
  position: relative;
  float: left;
  width: 100px;
  height: 100px;
  margin: 5px;
  padding: 10px;
  background: #888;
  color: #262524;
}

.element-item > * {
  margin: 0;
  padding: 0;
}

.element-item .name {
  position: absolute;

  left: 10px;
  top: 60px;
  text-transform: none;
  letter-spacing: 0;
  font-size: 12px;
  font-weight: normal;
}

.element-item .symbol {
  position: absolute;
  left: 10px;
  top: 0px;
  font-size: 42px;
  font-weight: bold;
  color: white;
}

.element-item .number {
  position: absolute;
  right: 8px;
  top: 5px;
}

.element-item .weight {
  position: absolute;
  left: 10px;
  top: 76px;
  font-size: 12px;
}

.element-item.alkali {
  background: #f00;
  background: hsl(0, 100%, 50%);
}
.element-item.alkaline-earth {
  background: #f80;
  background: hsl(36, 100%, 50%);
}
.element-item.lanthanoid {
  background: #ff0;
  background: hsl(72, 100%, 50%);
}
.element-item.actinoid {
  background: #0f0;
  background: hsl(108, 100%, 50%);
}
.element-item.transition {
  background: #0f8;
  background: hsl(144, 100%, 50%);
}
.element-item.post-transition {
  background: #0ff;
  background: hsl(180, 100%, 50%);
}
.element-item.metalloid {
  background: #08f;
  background: hsl(216, 100%, 50%);
}
.element-item.diatomic {
  background: #00f;
  background: hsl(252, 100%, 50%);
}
.element-item.halogen {
  background: #f0f;
  background: hsl(288, 100%, 50%);
}
.element-item.noble-gas {
  background: #f08;
  background: hsl(324, 100%, 50%);
}
</style>